package com.pkk.components.common.config.swagger;

import com.pkk.components.common.config.swagger.properties.SwaggerProperties;
import javax.annotation.Resource;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Import;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

/**
 * @description: swagger的配置
 * @author: peikunkun
 * @create: 2019-07-04 13:08
 **/
@Configuration
//@EnableApolloConfig
@ConditionalOnBean(annotation = EnableSwagger2.class)
@EnableConfigurationProperties(SwaggerProperties.class)
@DependsOn("swaggerProperties")
@Import(DynamicRefreshSwaggerProperties.class)
public class SwaggerConfig {

  @Resource
  private SwaggerProperties swaggerProperties;

  @Bean
  public Docket createRestApi() {
    return new Docket(DocumentationType.SWAGGER_2)
        .groupName(swaggerProperties.getGroupName())
        .apiInfo(apiInfo())
        //.protocols(Sets.newHashSet("https","http"))
        //.produces(Sets.newHashSet("html/text"))
        .pathMapping(swaggerProperties.getPathMapping())
        .enable(swaggerProperties.isEnable())
        .select()
        //为当前包路径
        .apis(RequestHandlerSelectors.basePackage(swaggerProperties.getBasePackage()))
        .paths(PathSelectors.any())
        .build();
  }

  //构建 api文档的详细信息函数,注意这里的注解引用的是哪个
  private ApiInfo apiInfo() {
    return new ApiInfoBuilder()
        //页面标题
        .title(swaggerProperties.getTitle())
        //创建人
        .contact(new Contact(swaggerProperties.getName(), swaggerProperties.getUrl(), swaggerProperties.getEmail()))
        //版本号
        .version(swaggerProperties.getVersion())
        //描述
        .description(swaggerProperties.getDesc())
        .build();
  }

}
